package com.monkeyboy.entity;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import java.io.Serializable;
import java.util.List;

/**
 * 通过注解，描述实体类型和MongoDB中集合的关系。
 * 类型对应哪一个集合？属性对应集合中的哪一个字段？
 * Document:
 *  描述类型，属性value|collection用来指定当前类型对应的哪一个集合，如果不提供属性，则使用默认规则。类名首字母小写
 */
@Document("user")
@Data
public class User implements Serializable {
    /**
     * id注解，是spring data提供的一个公共注解，用来描述实体类中的主键属性。
     * 在spring data mongodb环境中，如果实体类型的属性名命名为id或_id时，且这个属性就是主键属性的时候，可以省略Id注解
     *
     * mongodb中主键Long类型的，springData mongodb无法自动生成，只支持字符串类型的主键自动生成，
     * 所以如果是非字符串类型的需要自己手动设置id
     */
    @Id
    private Long id;
    /**
     * Field用来描述类型的属性和集合中的字段的映射关系。
     * 如果不适用注解描述属性，则集合中的字段名和类型中的属性名相同。
     * 可以使用注解的属性value|name来指定属性对应的字段名是什么
     */
    @Field
    private String username;
    private String password;
    private String email;
    private List<String> tags;
}
